<?php
namespace Common\ORG;
/**
 * AES 加密解密类
 */
class Aes {

	private $key; //密钥名称

	public function __construct($key){
		if($key){
			$this->key = $key;
		}else{
			$this->key = C('AES_KEY');	//密钥名称 
		}
		$this->out	=	'';
	}
	
	/**
	 * @todo   removePKCS7加密方法
	 * @param  string $instr
	 * @return string
	 */
	public function removePKCS7($instr){
		$imax = strlen($instr);
		for($i = 0 ; $i < $imax ; $i++){
			if(ord($instr[$i])>16)
			$this->out .=$instr[$i];
		}
		return $this->out;
	}

	/**
	 * @todo   paddingPKCS7加密方法
	 * @param  string $data
	 * @return string
	 */
	public function paddingPKCS7($data) {
		$block_size = 16;
		$padding_char = $block_size - (strlen($data) % $block_size);
		$data .= str_repeat(chr($padding_char),$padding_char);
		return $data;
	}

	/**
	 * @todo   aes加密方法
	 * @param  string or array $data
	 * @return string
	 */
	public function encode($data){
		return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->key, $this->paddingPKCS7($data), MCRYPT_MODE_ECB));
	}

	/**
	 * @todo   aes解密方法
	 * @param  array or string $data
	 * @return array or string
	 */
	public function decode($data){
		return self::removePKCS7(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key,base64_decode($data), MCRYPT_MODE_ECB));
	}
}